package com.test.springCloud.utils;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.imageio.ImageIO;
import javax.xml.bind.DatatypeConverter;

import cn.hutool.core.codec.Base64Decoder;
import lombok.extern.slf4j.Slf4j;

/**
 * 图片服务器工具类
 */
@Slf4j
public class ImgUtil {

	//图片服务器地址
	public final static String imgServersUrl ="http://img.yishun618.com";
	//对应服务器文件夹
	public static  String imgServerFolder = "D://webserver//nginx-1.19.6//imgserver";
	
	/**
	 * base64转图片
	 * 
	 * @param base64str base64码
	 * @param savePath  图片路径  (例如C:/abc/a.jpg)注：不传文件名会报拒绝访问的
	 * @return
	 */
	public static String GenerateImage(String base64str, String savePath) {
		// 对字节数组字符串进行Base64解码并生成图片
		if (base64str == null) {
			log.info("base64str:null");
			return null;
		}
		Base64Decoder decoder = new Base64Decoder();
		try {
			// Base64解码
			byte[] b = decoder.decode(base64str);
			for (int i = 0; i < b.length; ++i) {
				// 调整异常数据
				if (b[i] < 0) {
					b[i] += 256;
				}
			}
			// 生成jpeg图片
			OutputStream out = new FileOutputStream(savePath);
			out.write(b);
			out.flush();
			out.close();
			
			imgServerFolder = "D://webserver//nginx-1.19.6//imgserver";
			imgServerFolder = imgServerFolder.replaceAll("\\\\", "\\\\\\\\");
			savePath = savePath.replaceAll(imgServerFolder, imgServersUrl);
			savePath = savePath.replaceAll("\\\\", "/");
			return savePath;
		} catch (Exception e) {
			log.info("base64转图片时出现异常:" + e);
			return null;
		}
	}

	/**
	 * 根据月日创建文件夹 new 文件夹+文件
	 * 
	 * @throws ParseException
	 */
	public String createFileFolder(String prefixUrl) throws ParseException {

		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		String todayFileFolderName = sdf.format(new Date());

		// 文件夹不存在就创建
		File dest = new File(prefixUrl + "\\" + todayFileFolderName);
		if (!dest.exists()) {
			// 创建成功返回路径 不成功返回空(不成功因为存在)
			if (dest.mkdirs())
				return dest.toString();
			else
				return null;
		}
		//存在就返回这个路径
		return dest.toString();

	}

}
